package com.matrix.tool.ui.tool.dialog

import android.content.Context
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.widget.PopupWindow
import com.blankj.utilcode.util.ScreenUtils
import com.matrix.tool.R
import androidx.core.graphics.drawable.toDrawable

class RatioPopWin(context: Context, mAnchor: View, mRatioClickback: RatioClickback) :

    View.OnClickListener {

    private var context: Context = context
    private var mAnchor: View = mAnchor
    private var mRatioClickback: RatioClickback = mRatioClickback
    lateinit var mWindow: PopupWindow

    fun setCropRatio() {
        // 用于PopupWindow的View
        val contentView: View =
            LayoutInflater.from(context).inflate(R.layout.pop_ratio_layout, null, false)
        // 创建PopupWindow对象，其中：
        // 第一个参数是用于PopupWindow中的View，第二个参数是PopupWindow的宽度，
        // 第三个参数是PopupWindow的高度，第四个参数指定PopupWindow能否获得焦点
        mWindow = PopupWindow(
            contentView,
            ScreenUtils.getScreenWidth() * 4 / 5,
            ScreenUtils.getScreenHeight() * 2 / 3,
            true
        )
        contentView.findViewById<View>(R.id.tv_1to1).setOnClickListener(this)
        contentView.findViewById<View>(R.id.tv_any).setOnClickListener(this)
        contentView.findViewById<View>(R.id.tv_1to2).setOnClickListener(this)
        contentView.findViewById<View>(R.id.tv_2to1).setOnClickListener(this)
        contentView.findViewById<View>(R.id.tv_4to3).setOnClickListener(this)
        contentView.findViewById<View>(R.id.tv_16to9).setOnClickListener(this)
        contentView.findViewById<View>(R.id.tv_9to16).setOnClickListener(this)

        // 设置PopupWindow的背景
        mWindow.setBackgroundDrawable(
            context.resources.getColor(R.color.white).toDrawable()
        )
        // 设置PopupWindow是否能响应外部点击事件
        mWindow.isOutsideTouchable = false
        // 设置PopupWindow是否能响应点击事件
        mWindow.isTouchable = true
        // 显示PopupWindow，其中：
        // 第一个参数是PopupWindow的锚点，第二和第三个参数分别是PopupWindow相对锚点的x、y偏移
        mWindow.showAtLocation(mAnchor, Gravity.CENTER, 0, 0)
        // 或者也可以调用此方法显示PopupWindow，其中：
        // 第一个参数是PopupWindow的父View，第二个参数是PopupWindow相对父View的位置，
        // 第三和第四个参数分别是PopupWindow相对父View的x、y偏移
        // window.showAtLocation(parent, gravity, x, y);
    }

    override fun onClick(view: View?) {
        when (view?.id) {
            R.id.tv_any -> mRatioClickback.onRatio(0, 0)
            R.id.tv_1to1 -> mRatioClickback.onRatio(1, 1)
            R.id.tv_1to2 -> mRatioClickback.onRatio(1, 2)
            R.id.tv_2to1 -> mRatioClickback.onRatio(2, 1)
            R.id.tv_4to3 -> mRatioClickback.onRatio(4, 3)
            R.id.tv_16to9 -> mRatioClickback.onRatio(16, 9)
            R.id.tv_9to16 -> mRatioClickback.onRatio(9, 16)
        }
        mWindow.dismiss()
    }

    interface RatioClickback {
        fun onRatio(mAspectRatioX: Int, mAspectRatioY: Int)
    }
}